
var ALERTFORTIME_0001 = "日期格式不正确，只能输入6位或8位的有效日期，正确格式为：200808 或 20080804";
var ALERTFORTIME_0002 = '年份必须大于1800年';

 // 注意：删除类别，请继续添加类别，请不要删除已存在条件 - 开始
var TeShuZiFu = /["~!@#$%^&*_\-+=<>?:"{}|,.\/;'\\[\]·~！@#￥%&*\-+={}|《》？：“”【】、；‘’，。、……—— ]/im; // 全部特殊字符
var TeShuZiFu2 = /["~!@#$%^&*_\-+=<>?:"{}|,\/;'\\[\]·~！@#￥%&*\-+={}|《》？：“”【】、；‘’，。、……—— ]/im; // 不包含“.”
// 注意：删除类别，请继续添加类别，请不要删除已存在条件 - 结束

/**
 * 日期校验 6位或8位，符合日期格式，不能大于当前日期  [不能晚于当前日期]
 * @param {} value
 * @return {Boolean | String}
 */
function dateValidateBeforeTady(value){
    var rtn = dateValidate(value);
    if(rtn===true){
        var date1=new Date();
        var date2 = getDateLessOne(value);
        if(date1 == undefined){
            return ALERTFORTIME_0001;
        }
        if(Date.parse(date2)>Date.parse(date1)){ /*20100101 > 20200101*/
            return '不能晚于当前日期';
        }
        return true;
    }else{
        return rtn;
    }
}


/**
 * 日期校验 4位6位或8位，符合日期格式，不能以大于当前日期
 * @param {} value
 * @return {Boolean}
 */
function dateValidateBeforeTadyY(value){
    if(value == null){
        return true;
    }
    var length = value.length;
    if(length==0){
        return true;
    }else if(length==4){
        value = value + "01";
    }
    var rtn = dateValidate(value);
    if(rtn===true){
        var date1=new Date();
        var length = value.length;
        var year = value.substring(0,4);
        var month = value.substring(4,6);
        var day;
        if(length==8){
            day = value.substring(6,8);
        }else{
            day = '01';
        }
        year = parseInt(year,10); month = parseInt(month,10); day = parseInt(day,10);
        var date2=new Date(year, month-1,day)
        if(Date.parse(date2)>Date.parse(date1)){
            return '不能晚于当前日期';
        }
        return true;
    }else{
        return rtn;
    }

}
/**
 * 日期校验 6位或8位，符合日期格式，不能大于指定日期  [不能晚于指定日期]
 * @param {} value
 * @return {Boolean}
 */
function dateValidateBeforeAppointedDate(d1, d2){
    var rtn = dateValidate(d1);
    if(rtn===true){
        var date1 = getDateLessOne(d1);
        if(date1 == undefined){
            return ALERTFORTIME_0001;
        }
        var date2 = getDateLessOne(d2);
        if(date2 == undefined){
            return ALERTFORTIME_0001;
        }
        if(Date.parse(date1)>Date.parse(date2)){ // 20100101 > 20200101
            return '不能晚于' + d2;
        }
        return true;
    }else{
        return rtn;
    }
}

/**
 * 日期校验 6位或8位，符合日期格式
 * @param {} value
 * @return {string}
 */
function dateValidate(value){
    if(value == undefined){
        return true;
    }
    var length = value.length;
    if(length==0){
        return true;
    }else if(length!=6&&length!=8){
        return ALERTFORTIME_0001;
    }

    var year = value.substring(0,4);
    if(1800>(parseInt(year,10))){
        return ALERTFORTIME_0002;
    }
    var month = value.substring(4,6);
    var day;
    if(length==8){
        day = value.substring(6,8);
    }else{
        day = '01';
    }
    year = parseInt(year,10); month = parseInt(month,10); day = parseInt(day,10);
    if(0==month){
        return '"月" 格式不正确';
    }
    if(0==day){
        return '"日" 格式不正确';
    }
    var d= new Date(year, month-1,day);
    if(d.getFullYear()!=year) return ALERTFORTIME_0001;
    if(d.getMonth()!=month-1) return ALERTFORTIME_0001;
    if(d.getDate()!=day) return ALERTFORTIME_0001;
    return true;
}

/**
 * 日期校验 6位或8位，符合日期格式，不能小于当前日期  [不能早于当前日期]
 * @param {} value
 * @return {Boolean}
 */
function dateValidateAfterTady(value){
    var rtn = dateValidate(value);
    if(rtn===true){
        var date1=new Date();
        var date2 = getDateLessOne(value);
        if(date1 == undefined){
            return ALERTFORTIME_0001;
        }
        if(Date.parse(date2)<Date.parse(date1)){
            return '不能早于当前日期';
        }
        return true;
    }else{
        return rtn;
    }
}

/**
 * 日期校验 6位或8位，符合日期格式，不能小于指定日期  [不能早于指定日期]
 * @param {} value
 * @return {Boolean}
 */
function dateValidateAfterAppointedDate(d1, d2){
    var rtn = dateValidate(d1);
    if(rtn===true){
        var date1 = getDateLessOne(d1);
        if(date1 == undefined){
            return ALERTFORTIME_0001;
        }
        var date2 = getDateLessOne(d2);
        if(date2 == undefined){
            return ALERTFORTIME_0001;
        }
        if(Date.parse(date1)<Date.parse(date2)){
            return '不能早于' + d2;
        }
        return true;
    }else{
        return rtn;
    }
}

/**
 * 6位或8位时间字符串 转 时间对象 new Date(y, M, d)
 * @param value 时间字符串
 * @returns {Date|undefined} 时间对象
 */
function getDate(value) {
    if(ifnull(value) == 1){
        return undefined;
    }
    value = trim(value);
    var length = value.length;
    if(length != 6 && length != 8){
        return undefined;
    }
    var year = value.substring(0,4);
    var month = value.substring(4,6);
    var day;
    if(length==8){
        day = value.substring(6,8);
    }else{
        day = '01';
    }
    year = parseInt(year,10); month = parseInt(month,10); day = parseInt(day,10);
    return new Date(year, month, day);
}

/**
 * 两个字符串日期相差天数
 * @param val1 时间字符串1
 * @param val2 时间字符串2
 * @returns number 两个时间差的天数[绝对值]
 */
function dateDiff(val1, val2) {
    if(ifnull(val1) == 1 || ifnull(val2) == 1){
        return 0;
    }
    var day1 = getDate(val1);
    var day2 = getDate(val2);
    return Math.abs(day1-day2)/1000/60/60/24;
}

/**
 * 两个字符串日期相差月数
 * @param val1 时间字符串1
 * @param val2 时间字符串2
 * @returns number 两个时间差的月数[绝对值]
 */
function monthDiff(val1, val2) {
    if(ifnull(val1) == 1 || ifnull(val2) == 1){
        return 0;
    }
    var day1 = getDate(val1);
    var day2 = getDate(val2);
    return (day2.getYear()-day1.getYear())*12 + day2.getMonth()-day1.getMonth();
}

/**
 * 两个字符串日期相差年数
 * @param val1 时间字符串1
 * @param val2 时间字符串2
 * @returns number 两个时间差的天数[绝对值]
 */
function yearDiff(val1, val2) {
    return Math.floor(dateDiff(val1, val2) / 365);
}

/**-----------------------------------------------spreadjs 日期 自定义单元格格式 start-------------------------------------------------*/
function setNumberCellType(cs,row,col){
    var sheet = spread.getSheet(cs);
    // sheet.setFormatter( row, col, new NumberCellType());
    var numberCellType = new NumberCellType();
    sheet.getCell(row,col).cellType(numberCellType);

}
//非数字禁止输入
function NumberCellType() {
}
// NumberCellType.prototype = new GC.Spread.Sheets.CellTypes.Text();
// NumberCellType.prototype.paint = function(ctx, value, x, y, w, h,style, options) {
//     if (value) {
//         GC.Spread.Sheets.CellTypes.Text.prototype.paint.apply(this, [ctx, value, x, y, w, h, style, options ]);
//     }
// };
NumberCellType.prototype.updateEditor = function(editorContext,  cellStyle, cellRect) {
    if (editorContext) {
        $(editorContext).width(cellRect.width);
        $(editorContext).height(45);
    }
};
NumberCellType.prototype.createEditorElement = function(context) {
    var editor = GC.Spread.Sheets.CellTypes.Text.prototype.createEditorElement.call(this, context);
    var val = spread.getSheet(0).getValue(13,6);
    // var textarea = editor.firstChild;
    editor.onkeypress = function(event) {
        return event.keyCode >= 48 && event.keyCode <= 57 || event.keyCode == 46
    }
    editor.onkeyup = function(event) {
        var selected = $("span[class='gcsj-func-color-text']", $(this));
        if (selected.length > 0) {
            var val = selected.html();
            val = val.replace(/[\u4e00-\u9fa5]/g, '').replace(/\D/g, '');
            context.sheet.setValue(context.row,context.col,val);
        }
    }
    editor.onpaste = function(event) {
        var clipData = event.clipboardData;
        return !clipData.getData('text').match(/\D/);
    }
    editor.ondragenter = function(event) {
        return false;
    }
    if(val.length>20){
        val = val.substr(0,20);
    }
    editor.innerHTML = val;
    return editor;
};
NumberCellType.prototype.getEditorValue = function(editorContext) {
    if (editorContext) {
        var selectedVal = "";
        var selected = $("span[class='gcsj-func-color-text']", $(editorContext));
        if (selected.length > 0) {
            return selected.html()
        }
        return null;
    }
};
NumberCellType.prototype.setEditorValue = function(editorContext, value) {
    if (editorContext && value) {
        var input1 = editorContext;
        $(input1).val(value);
    }
};
// NumberCellType.prototype.isReservedKey = function(e) {
//     return (e.keyCode === GC.Spread.Commands.Key.tab && !e.ctrlKey&& !e.shiftKey && !e.altKey);
// };
NumberCellType.prototype.isEditingValueChanged = function(oldValue,  newValue) {
    if (newValue != oldValue) {
        return true;
    }
    return false;
};


/**
 * 6位或8位时间字符串 转 XXXX.XX
 * @param value 时间字符串
 * @returns {Date|undefined} 时间对象
 */
function setFormatter(cs,row,col){
    var sheet = spread.getSheet(cs);
    sheet.setFormatter( row, col, new MyFormatter());
    sheet.setFormatter( 1, col, new MyFormatter1());
    sheet.setFormatter( 2, col, new MyFormatter());
}
// Define custom formatter (private in function)
function MyFormatter(format, cultureName) {
    // GC.Spread.Formatter.FormatterBase.apply(this, arguments);
    this.typeName = "MyFormatter";
}
// MyFormatter.prototype = new GC.Spread.Formatter.FormatterBase();
MyFormatter.prototype.parse = function(str) {
    return str;
};
MyFormatter.prototype.format = function(value, conditionalForeColor) {
    if(ifnull(value) == 1){
        return value;
    }
    value = trim(value);
    var length = value.length;
    if(length != 6 && length != 8){
        return value;
    }
    var year = value.substring(0,4);
    var month = value.substring(4,6);
    var day;
    if(length==8){
        day = value.substring(6,8);
    }else{
        day = '01';
    }
    //year = parseInt(year,10); month = parseInt(month,10); day = parseInt(day,10);
    value = year+"."+month;
    return value;
}
// Define custom formatter (private in function)
function MyFormatter1(format, cultureName) {
    // GC.Spread.Formatter.FormatterBase.apply(this, arguments);
    this.typeName = "MyFormatter";
}
// MyFormatter1.prototype = new GC.Spread.Formatter.FormatterBase();
MyFormatter1.prototype.parse = function(str) {
    return str;
};
MyFormatter1.prototype.format = function(value, conditionalForeColor) {
    return value.replace(".","");
}
/**-----------------------------------------------------spreadjs 自定义单元格格式 end-----------------------------------------------------*/
/**
 *  6位或8位时间字符串 转 (月份减少一月)时间对象 new Date(y, M, d)
 * @param value 时间字符串
 * @returns {Date|undefined} (月份减少一月)时间对象
 */
function getDateLessOne(value) {
    if(ifnull(value) == 1){
        return undefined;
    }
    value = trim(value);
    var length = value.length;
    if(length != 6 && length != 8){
        return undefined;
    }
    var year = value.substring(0,4);
    var month = value.substring(4,6);
    var day;
    if(length==8){
        day = value.substring(6,8);
    }else{
        day = '01';
    }
    year = parseInt(year,10); month = parseInt(month,10); day = parseInt(day,10);
    return new Date(year, month-1,day);
}

/**
 * 获取当前时间的字符串 20190101
 * @param val 是否存在参数
 * @returns {string}
 */
function getNowDate() {
    var now = new Date();
    var year = now.getFullYear();       //年
    var month = now.getMonth() + 1;     //月
    var moStr = month < 10 ? "0" + month : month + "";
    var day = now.getDate();            //日
    var daStr = day < 10 ? "0" + day : day + "";
    return year + '' + moStr + '' + daStr;
}

/**
 * 获取当前时间的字符串 20190101122334
 * @param val 是否存在参数
 * @returns {string}
 */
function getNowTime() {
    var now = new Date();
    var year = now.getFullYear();       //年
    var month = now.getMonth() + 1;     //月
    var moStr = month < 10 ? "0" + month : month + "";
    var day = now.getDate();            //日
    var daStr = day < 10 ? "0" + day : day + "";
    var hour = now.getHours();         //时
    var hStr = hour < 10 ? "0" + hour : hour + "";
    var minu = now.getMinutes();        //分
    var mStr = minu < 10 ? "0" + minu : minu + "";
    var sec = now.getSeconds();        //秒
    var sStr = sec < 10 ? "0" + sec : sec + "";
    return year + '' + moStr + '' + daStr + '' + hStr + '' + mStr + '' + sStr;
}

/**
 * 获取任免表的计算工作年限( 年限 进行四舍五入原则 )
 * @param a0134 参加工作时间字符串
 * @param a3381 工作年限增加(月数)字符串
 * @param value 工作年限扣减(月数)字符串
 * @returns {string} 工作年数 年限 进行四舍五入原则
 */
function getGZNX(a0134, a3381, a3382) {
    if(ifnotnull(a0134) == 1){
        if(a0134.length == 4){
            a0134 = a0134 + "01";
        }
        if(a0134.length == 6){
            a0134 = a0134 + "01";
        }
    }else{
        return "0";
    }
    a3381 = ifnull(a3381) == 1 ? 0 : a3381;
    a3382 = ifnull(a3382) == 1 ? 0 : a3382;
    var a3381Int = parseInt(a3381);
    var a3382Int = parseInt(a3382);
    var date = getNowDate();
    var dateY = date.substring(0, 4);
    var dateYint = parseInt(dateY);
    var dateM = date.substring(4, 6);
    var dateMint = parseInt(dateM);

    var a0134Y = a0134.substring(0, 4);
    var a0134Yint = parseInt(a0134Y);
    var a0134M = a0134.substring(4, 6);
    var a0134Mint = parseInt(a0134M);

    if(dateM < a0134M){
        dateYint = dateYint - 1;
        dateMint = dateMint + 12;
    }

    var s =parseInt((dateYint-a0134Yint)+(dateMint-a0134Mint+a3381Int-a3382Int)/12);
    return Math.round(s)+"";
}

/**
 *  判断是否包含 , 为空返回 1 ， 非空返回 0
 * @param s 验证字符串
 * @param k 校验类别
 * @returns {number} 符合的为 1
 */
function haveTeShuStr(s , k){
    if(ifnull(s) == 1){
        return 0;
    }else{
        k = !k ? 1 : k;

        if(TeShuZiFu.test(s) && k == 1){
            return 1;
        }else if(TeShuZiFu2.test(s) && k == 2){
            return 1;
        }
        return 0;
    }
}

/**
 *  判断是否为空 , 为空返回 1 ， 非空返回 0
 * @param s 验证字符串
 * @returns {number} 符合的为 1
 */
function ifundefined(s){
    if(s==undefined || s==null){
        return 1;
    }else{
        return 0;
    }
}

/**
 *  判断是否为空 , 为空返回 1 ， 非空返回 0
 * @param s 验证字符串
 * @returns {number} 符合的为 1
 */
function ifnull(s){
    if(s==undefined || s==null || s==""){
        return 1;
    }else{
        return 0;
    }
}

/**
 *  判断去除空白后 是否为空 , 为空返回 1 ， 非空返回 0
 * @param s 验证字符串
 * @returns {number} 符合的为 1
 */
function ifnulltrim(s){
    if(s==undefined || s==null || trim(s)==""){
        return 1;
    }else{
        return 0;
    }
}

/**
 *  判断是否非空 ， 为空返回 0 ， 非空返回 1
 * @param s 验证字符串
 * @returns {number} 符合的为 1
 */
export function ifnotnull(s){
    return ifnull(s) == 1 ? 0 : 1;
}

/**
 *  判断是否非空 ， 为空返回 0 ， 非空返回 1
 * @param s 验证字符串
 * @returns {number} 符合的为 1
 */
function ifnotnulltrim(s){
    return ifnulltrim(s) == 1 ? 0 : 1;
}


/**
 *  去除两端空白
 * @param s 验证字符串
 * @returns {String|string} 返回字符串
 * @returns {number} 符合的为 1
 */
function trim(s){
    return trimRight(trimLeft(s));
}

/**
 *  去掉左边的空白
 * @param s 验证字符串
 * @returns {number} 符合的为 1
 */
function trimLeft(s){
    if(s == null) {
        return "";
    }
    var whitespace = new String(" \t\n\r");
    var str = new String(s);
    if (whitespace.indexOf(str.charAt(0)) != -1) {
        var j=0, i = str.length;
        while (j < i && whitespace.indexOf(str.charAt(j)) != -1){
            j++;
        }
        str = str.substring(j, i);
    }
    return str;
}

/**
 * 去掉右边的空白
 * @param s  验证字符串
 * @returns {String|string}
 */
function trimRight(s){
    if(s == null) return "";
    var whitespace = new String(" \t\n\r");
    var str = new String(s);
    if (whitespace.indexOf(str.charAt(str.length-1)) != -1){
        var i = str.length - 1;
        while (i >= 0 && whitespace.indexOf(str.charAt(i)) != -1){
            i--;
        }
        str = str.substring(0, i+1);
    }
    return str;
}

/**
 * 根据出生年月拼接任免表字符串
 * @param value
 * @returns {number|*}
 */
function getAgeRender(value) {
    var returnAge;
    if (value == "" || value == null || typeof (value) == "undefined") {
        return returnAge;
    } else {
        var birthYear = value.toString().substring(0, 4);
        var birthMonth = value.toString().substring(4, 6);
        var birthDay = value.toString().substring(6, 8);
        if (birthDay == "" || birthDay == null || typeof (birthDay) == "undefined") {
            birthDay = "01";
        }
        d = new Date();
        var nowYear = d.getFullYear();
        var nowMonth = d.getMonth() + 1;
        var nowDay = d.getDate();
        if (nowYear == birthYear) {
            returnAge = 0; // 同年返回0岁
        } else {
            var ageDiff = nowYear - birthYear; // 年只差
            if (ageDiff > 0) {
                if (nowMonth == birthMonth) {
                    var dayDiff = nowDay - birthDay;// 日之差
                    if (dayDiff < 0) {
                        returnAge = ageDiff - 1;
                    } else {
                        returnAge = ageDiff;
                    }
                } else {
                    var monthDiff = nowMonth - birthMonth;// 月之差
                    if (monthDiff < 0) {
                        returnAge = ageDiff - 1;
                    } else {
                        returnAge = ageDiff;
                    }
                }
            } else {
                returnAge = -1;//出生日期错误 晚于今年
            }
        }
        return returnAge;

    }
}

/**
 * 根据出生年月拼接任免表字符串，格式：1992.08(18岁)
 * @param value
 * @returns {string}
 */



/**
 * 处理时间格式，格式：2001.01
 * @param value
 * @returns {string}
 */
function getTime(value) {
    var returnTime;
    if (value == "" || value == null || typeof (value) == "undefined") {
        returnTime = "";
        return returnTime;
    } else {
        returnTime = value.toString().substring(0, 4)+"."+value.toString().substring(4, 6);
        return returnTime;

    }
}

/**
 * 判断字符串是否包含 空格【全角、半角】
 * @param str
 * @returns {boolean}
 */
function haveBlankSpace(str) {
    if(ifnull(str) == 1){
        return false;
    }else{
        if(str.match(/[\u3000\x20\xA0\u2002\u2003]{1,}/)){
            return true;
        }else{
            return false;
        }
    }
}

/**
 * 是试用期
 * @param alertStr 	职务层次代码值
 * @return boolean 	true 是 false 否
 */
function a0221IsSYQ(v) {
    if(v == '1A98' || v == '1A99' || v == '998' || v == '999' || v == 'C98' || v == 'C99'){//当职务层次为试用期及其他
        return true;
    }else{
        return false;
    }
}

/**
 * 是公务员-领导职务
 * @param alertStr 	职务层次代码值
 * @return boolean 	true 是 false 否
 */
function a0221IsLDZW(v) {
    if(v == '1A01' || v == '1A02' || v == '1A11' || v == '1A12' || v == '1A21' || v == '1A22' ||
        v == '1A31' || v == '1A32' || v == '1A41' || v == '1A42'){//当职务层次为公务员领导职务进行校验
        return true;
    }else{
        return false;
    }
}

/**
 * 是法官等级
 * @param alertStr 	职务层次代码值
 * @return boolean 	true 是 false 否
 */
function a0221IsFGDJ(v) {
    if(v == '301' || v == '302' || v == '303' || v == '304' || v == '305' || v == '306' ||
        v == '307' || v == '308' || v == '309' || v == '310' || v == '311' || v == '312'){//当职务层次为法官等级职务进行校验
        return true;
    }else{
        return false;
    }
}

/**
 * 是检察官等级
 * @param alertStr 	职务层次代码值
 * @return boolean 	true 是 false 否
 */
function a0221IsJCGDJ(v) {
    if(v == '401' || v == '402' || v == '403' || v == '404' || v == '405' || v == '406' ||
        v == '407' || v == '408' || v == '409' || v == '410' || v == '411' || v == '412'){//当职务层次为检察官等级职务进行校验
        return true;
    }else{
        return false;
    }
}

/**
 * 是消防管理干部
 * @param alertStr 	职务层次代码值
 * @return boolean 	true 是 false 否
 */
function a0221IsXFGL(v) {
    if( v == '801' || v == '802' || v == '803' || v == '804' || v == '805' ||
        v == '806' || v == '807' || v == '808' ){//当职务层次为消防管理干部职务进行校验
        return true;
    }else{
        return false;
    }
}

/**
 * 是人员类别-领导职务
 * @param alertStr 	人员类别代码值
 * @return boolean 	true 是 false 否
 */
function a0221IsLD(v) {
    if(a0221IsLDZW(v) || a0221IsFGDJ(v) || a0221IsJCGDJ(v) || a0221IsXFGL(v)){//当公务员-领导职务、法官等级、检察官等级、消防管理干部
        return true;
    }else{
        return false;
    }
}


/**
 * 是人员类别-领导职务
 * @param alertStr 	人员类别代码值
 * @return boolean 	true 是 false 否
 */
function a0160IsLDZW(v) {
    if(v == '1' || v == '5' || v == '6'){//当人员类别为公务员、参照管理机关工作人员、参照管理事业单位人员进行校验
        return true;
    }else{
        return false;
    }
}

/**
 * 获取更新后列表数据
 * @param newGridAll 新的数组数据
 * @param CRUDRow 原操作记录
 */
function getGridData(newGridAll, CRUDRow, rowSign){
    var a; // 获取对比的记录
    for (var i = 0, j = newGridAll.length; i < j; i++) {
        a = newGridAll[i];
        if(a[rowSign] == CRUDRow[rowSign]){
            return a;
        }
    }
    return CRUDRow;
}


/**
 * 判断简历是否属于“期间”情况
 * @param a1701str
 * @returns {boolean}
 */
function isQiJian(a1701str) {
    if(a1701str.indexOf("(其") == 0||a1701str.indexOf("（其") == 0||
        a1701str.indexOf("(期") == 0||a1701str.indexOf("（期") == 0||
        a1701str.indexOf("(1") == 0 ||a1701str.indexOf("（1") == 0||
        a1701str.indexOf("(2") == 0 ||a1701str.indexOf("（2") == 0){
        return true;
    }else{
        return false;
    }
}


//获取字符串对象，无论当对象为空时，返回空字符串
function getObjStrOutNull(value) {
    return ifnull(value) == 1 ? "" : value;
}
/*获取UUID*/
function getUUID(t, e) {
    var i = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),
        n = [],
        r = void 0;
    if (e = e || i.length, t) for (r = 0; r < t; r++) n[r] = i[0 | Math.random() * e];
    else {
        var a = void 0;
        for (n[8] = n[13] = n[18] = n[23], n[14] = "4", r = 0; r < 36; r++) n[r] || (a = 0 | 16 * Math.random(), n[r] = i[19 === r ? 3 & a | 8 : a])
    }
    return n.join("");
}

/**
 * 校验输出是否为数字， 数字返回1 否则返回 0
 * @param input
 * @returns {number}
 */
function ifnumber(a) {
    var re = /^[0-9]+.?[0-9]*/;//判断字符串是否为数字//判断正整数/[1−9]+[0−9]∗]∗/
    if (!re.test(a)) {
        return 0;
    }else{
        return 1;
    }
}

/**
 * 校验输出是否为非数字， 非数字返回1 否则返回 0
 * @param input
 * @returns {number}
 */
function ifnotnumber(a) {
    return ifnumber(a) == 1 ? 0 : 1;
}
/**
 * */
var $h =  {
    'date' : function(_v,isY){	//isY 可以只到年
        if(isY){
            return dateValidateBeforeTadyY(_v);
        }else{
            return dateValidateBeforeTady(_v);
        }
    },
    "IDCard" : function(_v) {
        if(_v=='' || _v==undefined)return true;
        var area = {
            11 : "北京",
            12 : "天津",
            13 : "河北",
            14 : "山西",
            15 : "内蒙古",
            21 : "辽宁",
            22 : "吉林",
            23 : "黑龙江",
            31 : "上海",
            32 : "江苏",
            33 : "浙江",
            34 : "安徽",
            35 : "福建",
            36 : "江西",
            37 : "山东",
            41 : "河南",
            42 : "湖北",
            43 : "湖南",
            44 : "广东",
            45 : "广西",
            46 : "海南",
            50 : "重庆",
            51 : "四川",
            52 : "贵州",
            53 : "云南",
            54 : "西藏",
            61 : "陕西",
            62 : "甘肃",
            63 : "青海",
            64 : "宁夏",
            65 : "新疆",
            71 : "台湾",
            81 : "香港",
            82 : "澳门",
            91 : "国外"
        }
        var Y, JYM;
        var S, M;
        if(_v == '' || _v == undefined || _v == null)return;
        // 地区检验
        if (area[parseInt(_v.substr(0, 2),10)] == null) {
            this.IDCardText = "身份证号码地区非法!!,格式例如:32";
            return this.IDCardText;
        }
        var ereg;
        /*身份号码位数及格式检验*/
        switch (_v.length) {
            case 15 :
                if ((parseInt(_v.substr(6, 2),10) + 1900) % 4 == 0
                    || ((parseInt(_v.substr(6, 2),10) + 1900)
                        % 100 == 0 && (parseInt(_v.substr(
                            6, 2),10) + 1900)
                        % 4 == 0)) {
                    ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;// 测试出生日期的合法性
                } else {
                    ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;// 测试出生日期的合法性
                }
                if (ereg.test(_v))
                    return true;
                else {
                    this.IDCardText = "身份证号码出生日期超出范围,格式例如:19860817";
                    return this.IDCardText;
                }
                break;
            case 18 :
                // 18位身份号码检测
                // 出生日期的合法性检查
                // 闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))
                // 平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))
                if (parseInt(_v.substr(6, 4),10) % 4 == 0
                    || (parseInt(_v.substr(6, 4),10) % 100 == 0 && parseInt(_v
                            .substr(6, 4),10)
                        % 4 == 0)) {
                    ereg = /^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;// 闰年出生日期的合法性正则表达式
                } else {
                    ereg = /^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;// 平年出生日期的合法性正则表达式
                }
                var idcard_array = _v.split("");
                if (ereg.test(_v)) {// 测试出生日期的合法性
                    // 计算校验位
                    S = (parseInt(idcard_array[0],10) + parseInt(idcard_array[10],10))
                        * 7
                        + (parseInt(idcard_array[1],10) + parseInt(idcard_array[11],10))
                        * 9
                        + (parseInt(idcard_array[2],10) + parseInt(idcard_array[12],10))
                        * 10
                        + (parseInt(idcard_array[3],10) + parseInt(idcard_array[13],10))
                        * 5
                        + (parseInt(idcard_array[4],10) + parseInt(idcard_array[14],10))
                        * 8
                        + (parseInt(idcard_array[5],10) + parseInt(idcard_array[15],10))
                        * 4
                        + (parseInt(idcard_array[6],10) + parseInt(idcard_array[16],10))
                        * 2
                        + parseInt(idcard_array[7],10)
                        * 1
                        + parseInt(idcard_array[8],10)
                        * 6
                        + parseInt(idcard_array[9],10) * 3;
                    Y = S % 11;
                    M = "F";
                    JYM = "10X98765432";
                    M = JYM.substr(Y, 1);// 判断校验位
                    // alert(idcard_array[17]);
                    if (M == idcard_array[17]||(M == "X"&&idcard_array[17]=="x")) {
                        return true; // 检测ID的校验位
                    } else {
                        this.IDCardText = "身份证号码末位校验位校验出错,正确的校验码为："+M;
                        return this.IDCardText;
                    }
                } else {
                    this.IDCardText = "身份证号码出生日期超出范围,格式例如:19860817";
                    return this.IDCardText;
                }
                break;
            default :
                this.IDCardText = "身份证号码位数不对,应该为15位或是18位";
                return this.IDCardText;
                break;
        }
    },
    'getYear' : function(startdate, enddate){
        if (startdate == "" || startdate == null || typeof (startdate) == "undefined") {
            return "";
        }
        if (startdate == "" || startdate == null || typeof (startdate) == "undefined") {
            return "";
        }

        var sd = parseInt(startdate,10);
        var ed = parseInt(enddate,10);

        if(isNaN(sd)||isNaN(ed)){
            return "";
        }
        if(sd.toString().length!=6&&sd.toString().length!=8){
            return "";
        }
        if(ed.toString().length!=6&&ed.toString().length!=8){
            return "";
        }
        if(sd.toString().length==6){
            sd = parseInt(sd.toString() + "01");
        }
        if(ed.toString().length==6){
            ed = parseInt(ed.toString() + "01");
        }
        var btyear = parseInt(ed/10000-sd/10000);
        return btyear.toString();
    },
}


/**
 * makeSelName 已某字符结尾，则截取该字符
 */
function makeSelName(selName, endStr) {
    if('' == selName || '' == endStr){
        return selName;
    }
    if(selName.endsWith(endStr)){
        return selName.substr(0,selName.length-1)
    }
}

/* 获取uuid*/
function createUUID(_this) {
    var s = [];
    var hexDigits = "0123456789abcdef";
    for (var i = 0; i < 36; i++) {
        s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
    }
    s[14] = "4"; // bits 12-15 of the time_hi_and_version field to 0010
    s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
    s[8] = s[13] = s[18] = s[23] = "-";

    var uuid = s.join("");
    _this.uuid = uuid;
}

function isGirl(key) {
    if(key.indexOf("母") != -1 || key.endsWith("女") || key.endsWith("女儿") || key == '嫂子' || key == '妻子' ||
        key.endsWith("妹") || key.endsWith("姐") || key.endsWith("婆") || key.endsWith("媳")){
        return true;
    }else{
        return false;
    }
}

/**
 * 正序排序
 * @param a
 * @param b
 * @returns {number}
 */
function sortAscNumber(a,b){
    return a - b
}
/**
 * 倒序排序
 * @param a
 * @param b
 * @returns {number}
 */
function sortDescNumber(a,b){
    return a - b
}

/**
 * 获取uuid
 */
// function createUUID() {
//     var s = [];
//     var hexDigits = "0123456789abcdef";
//     for (var i = 0; i < 36; i++) {
//         s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
//     }
//     s[14] = "4"; // bits 12-15 of the time_hi_and_version field to 0010
//     s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
//     s[8] = s[13] = s[18] = s[23] = "-";
//
//     return s.join("");
// }

/**
 * 主要 - 提示下载文件操作
 * @param path 文件存储服务器路径
 * @param fileName 文件下载时名称，（不带格式）
 */
function downLoadFile(path, fileName){
    var url = API_ROOT + 'servlet/ProblemDownServlet?method=downFile2&prid=' + encodeURI(encodeURI(path)) + '&realfilename=' + encodeURI(encodeURI(fileName)) + '';
    var link = document.createElement('a');
    link.style.display = 'none';
    link.href = url;
    document.body.appendChild(link);
    link.click();
}

/**
 * 机构 编码路径转换
 * 如： getPath('001.001.002.003.004') => ['001.001','001.001.002','001.001.002.003','001.001.002.003.004']
 * @param pathStr
 * @returns {any[]}
 */
function getPath(pathStr){
    var arr = new Array();
    arr.push(pathStr);
    if(ifnull(pathStr) == 1 || pathStr.length < 7 || !pathStr.startsWith('001.001')){
        return arr;
    }

    for (var i = 0; i < 30; i++) {
        if(pathStr == '001.001'){
            break;
        }else{
            pathStr = pathStr.substr(0, pathStr.length-4);
            arr.push(pathStr);
        }
    }

    arr = arr.reverse();
    return arr;
}



/*
 * 获取下一个元素
 */
function get(val) {
    var result = aim;
    while (result.next != null && result.aimid != val) {
        result = result.next;
    }
    return result;
}

/*
 * 实现获取焦点方法
 */
function opInput(obj) {
    if (obj != null) {
        var type = obj.type;
        if ("div" == type) {
            $("#" + obj.id).click();
            $("#" + obj.aimid).focus();
        } else if ("input" == type) {
            $("#" + obj.aimid).focus();
        } else if ("win" == type) {
            $("#" + obj.id).click();
            $("#" + obj.aimid).focus();
        } else {
            $("#" + obj.id).click();
            $("#" + obj.id).focus();
        }
    }
}

var aCity = {
    11: "北京",
    12: "天津",
    13: "河北",
    14: "山西",
    15: "内蒙古",
    21: "辽宁",
    22: "吉林",
    23: "黑龙江",
    31: "上海",
    32: "江苏",
    33: "浙江",
    34: "安徽",
    35: "福建",
    36: "江西",
    37: "山东",
    41: "河南",
    42: "湖北",
    43: "湖南",
    44: "广东",
    45: "广西",
    46: "海南",
    50: "重庆",
    51: "四川",
    52: "贵州",
    53: "云南",
    54: "西藏",
    61: "陕西",
    62: "甘肃",
    63: "青海",
    64: "宁夏",
    65: "新疆",
    71: "台湾",
    81: "香港",
    82: "澳门",
    91: "国外"
}

/**
 * 校验身份证信息
 * @param sId
 * @returns {string|boolean}
 */
function isIdCard(sId, a0104) {
    //将15位身份证号码转换为18位
    var sId = changeFivteenToEighteen(sId);
    var iSum = 0;
    var info = "";
    if (!/^\d{17}(\d|x)$/i.test(sId)) return "您输入的身份证长度或格式错误";
    sId = sId.replace(/x$/i, "a");
    if (aCity[parseInt(sId.substr(0, 2))] == null) return "您的身份证地区非法";
    sBirthday = sId.substr(6, 4) + "-" + Number(sId.substr(10, 2)) + "-" + Number(sId.substr(12, 2));
    var d = new Date(sBirthday.replace(/-/g, "/"));
    if (sBirthday != (d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate())) return "身份证上的出生日期非法";
    for (var i = 17; i >= 0; i--) iSum += (Math.pow(2, i) % 11) * parseInt(sId.charAt(17 - i), 11);
    if (iSum % 11 != 1) return "您输入的身份证号非法";
    //aCity[parseInt(sId.substr(0,2))]+","+sBirthday+","+(sId.substr(16,1)%2?"男":"女");//此次还可以判断出输入的身份证号的人性别

    //验证性别
    //判断身份证倒数第二位是否和性别一致
    var sex = sId.substr((sId.length - 2), 1);

    var sexA0104 = sex % 2;		//取余数

    if (sexA0104 == 0) {
        sexA0104 = 2;
    }

    if (a0104 && sexA0104 != a0104) {
        return "身份证号码倒数第二位数和性别不一致";
    }

    return true;
}

//将15位身份证号码转换为18位
function changeFivteenToEighteen(obj) {
    if (obj.length == '15') {
        var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
        var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
        var cardTemp = 0, i;
        obj = obj.substr(0, 6) + '19' + obj.substr(6, obj.length - 6);
        for (i = 0; i < 17; i++) {
            cardTemp += obj.substr(i, 1) * arrInt[i];
        }
        obj += arrCh[cardTemp % 11];
        return obj;
    }
    return obj;
};


//验证身份证号并获取出生日期
function getBirthdatByIdNo(iIdNo) {
    var tmpStr = "";
    var idDate = "";
    var tmpInt = 0;
    var strReturn = "";

    iIdNo = trim(iIdNo);
    if (iIdNo.length == 15) {
        tmpStr = iIdNo.substring(6, 12);
        tmpStr = "19" + tmpStr;
        tmpStr = tmpStr.substring(0, 4) + tmpStr.substring(4, 6) + tmpStr.substring(6)

        return tmpStr;
    } else {
        tmpStr = iIdNo.substring(6, 14);
        tmpStr = tmpStr.substring(0, 4) + tmpStr.substring(4, 6) + tmpStr.substring(6)
        return tmpStr;
    }
}

// 获取两个时间点相差年数 t1 > t2
function getAge(t1, t2) {

    if (t1 == undefined || t2 == undefined || (t1.length != 4 && t1.length != 6 && t1.length != 8)) {
        return 0;
    }

    var t1year = t1.substring(0, 4);
    var t2year = t2.substring(0, 4);
    return parseInt(t1year) - parseInt(t2year);
}


/**
 * 实现简历格式化
 * @param obj
 * @returns {string}
 */

/*
* 01.半角空格(英文符号-nbsp)不间断空格\u00A0,主要用在office中,让一个单词在结尾处不会换行显示,快捷键ctrl+shift+space ;
* 02.半角空格(英文符号-ensp)\u2002;
* 02.半角空格(英文符号-emsp)\u2003;
* 02.半角空格(英文符号)\u0020,代码中常用的;
* 03.全角空格(中文符号)\u3000,中文文章中使用;
* 04.正则表达式引擎之间比较通用的规则，形式：/xXX 编号在 0 ~ 255 范围的字符，比如：空格可以使用 "\x20" 表示
* 05.在scrapy中使用正则表达式匹配“\xa0”的问题，\xa0对应html中的&nbsp
* 06.在scrapy中使用正则表达式匹配“\uff0e”的问题，\uff0e对应html中的'.'
* 07.在scrapy中使用正则表达式匹配“\u2500”的问题，\u2500对应html中的'-'
* 08.在scrapy中使用正则表达式匹配“\u2014”的问题，\u2014对应html中的'-'
* 09.在scrapy中使用正则表达式匹配“\uff0d”的问题，\uff0d对应html中的'-'
* 10.在scrapy中使用正则表达式匹配“\uff0d”的问题，\uff0d对应html中的'-'
*/
export function a1701Format(obj) {
    var a1701 = obj.replace(/期间/g, '其间');
    var a1701Array = a1701.replace(/\r/g, '').split('\n');
    for (var index = 0; index < a1701Array.length; index++) {
        var text = a1701Array[index].trim().replace(/^[\u3000\x20\xA0\u2003]{1,}/, '').replace(/[\u3000\x20\xA0\u2002\u2003]{1,}$/, '');

        if(ifnull(text) == 1){
            continue;
        }

        /**
         * 匹配yyyy.MM -- yyyy.MM格式的，中间{[M -]、[- y]}存在空格
         */
        if (text.match(/^[0-9]{4}[\.\uff0e][0-9]{2}\s*[\-\u2500\u2014\uff0d]{1,}\s*[0-9]{4}[\.\uff0e][0-9]{2}[\u3000\x20\xA0\u2002\u2003]{1,}/)) {
            text = text.replace(/\s*--\s*/g, '--');
        }
        /**
         * 匹配yyyy.MM --  格式的，中间{[M -]}存在空格
         */
        if (text.match(/^[0-9]{4}[\.\uff0e][0-9]{2}\s*[\-\u2500\u2014\uff0d]{1,}[\u3000\x20\xA0\u2002\u2003]{1,}/)) {
            text = text.replace(/\s*--/g, '--');
        }

        /**
         * 匹配yyyy.MM -- yyyy.MM格式的，中间存在空格
         */
        if (text.match(/^[0-9]{4}[\.\uff0e][0-9]{2}[\-\u2500\u2014\uff0d]{1,}[0-9]{4}[\.\uff0e][0-9]{2}[\u3000\x20\xA0\u2002\u2003]{1,}/)) {
            text = text.replace(/[\.\uff0e]/g, '.').replace(/[\-\u2500\u2014\uff0d]{1,}/, '--').replace(/[\u3000\x20\xA0\u2002\u2003]{1,}/, '\u0020\u0020');
        }
        if (text.match(/^[0-9]{4}[\.\uff0e][0-9]{2}[\-\u2500\u2014\uff0d]{1,}[\u3000\x20\xA0\u2002\u2003]{1,}/)) {
            text = text.replace(/[\.\uff0e]/g, '.').replace(/[\-\u2500\u2014\uff0d]{1,}/, '--').replace(/[\u3000\x20\xA0\u2002\u2003]{1,}/, '\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020');
        }

        /**
         * 横线部分处理
         */
        a1701Array[index] = text.replace(/[\u3000\x20\xA0\u2002\u2003]{18,}/g, '\n');
    }
    var newA1701 = '';
    for (var index = 0; index < a1701Array.length; index++) {
        if(ifnulltrim(a1701Array[index]) == 1){
            continue;
        }
        newA1701 = newA1701 + a1701Array[index] + '\n';
    }
    return newA1701;
}

/**
 * 获取 时间字符串处理
 * @param a
 * @returns {string}
 */
function get8TimeFor6Or4(a) {
    if (ifnull(a) == 1) {
        return '';
    }

    if (a.length == 6) {
        a = a + '01';
    }

    if (a.length == 4) {
        a = a + '0101';
    }
    return a;
}

/**
 * 是否为 中专及以下学历，该部分无需要填写学历
 * @param a0801b
 * @returns {boolean}
 */
function isNoXueWei(a0801b) {
    if (a0801b == '41' || a0801b == '47' || a0801b == '61' || a0801b == '71' || a0801b == '81' || a0801b == '91' || a0801b == '') {
        return true;
    } else {
        return false;
    }
}

/**
 * 是否为 中专及以下学历，该部分无需要填写学历
 * @param a0801b
 * @returns {boolean}
 */
function a36Order() {
    return {
        '丈夫': '丈夫',
        '妻子': '妻子',
        '儿子': '儿子',
        '女儿': '女儿',
        '父亲': '父亲',
        '母亲': '母亲',
        '长子': '长子',
        '长女': '长女',
        '次子': '次子',
        '次女': '次女',
        '三子': '三子',
        '三女': '三女',
        '四子': '四子',
        '四女': '四女',
        '五子': '五子',
        '五女': '五女',
        '养子': '养子',
        '养女': '养女',
        '哥哥': '哥哥',
        '弟弟': '弟弟',
        '姐姐': '姐姐',
        '妹妹': '妹妹',
        '继子': '继子',
        '继女': '继女',
        '女婿': '女婿',
        '儿媳': '儿媳',
        '其他女儿': '其他女儿',
        '孙子': '孙子',
        '孙女': '孙女',
        '外孙子': '外孙子',
        '外孙女': '外孙女',
        '公公': '公公',
        '婆婆': '婆婆',
        '岳父': '岳父',
        '岳母': '岳母',
        '继父': '继父',
        '养父': '养父',
        '继母': '继母',
        '养母': '养母',
        '祖父': '祖父',
        '祖母': '祖母',
        '外祖父': '外祖父',
        '外祖母': '外祖母',
        '曾祖父': '曾祖父',
        '曾祖母': '曾祖母',
        '嫂子': '嫂子',
        '弟媳': '弟媳',
        '姐夫': '姐夫',
        '妹夫': '妹夫',
        '伯父': '伯父',
        '伯母': '伯母',
        '叔父': '叔父',
        '婶母': '婶母',
        '舅父': '舅父',
        '舅母': '舅母',
        '姨父': '姨父',
        '姨母': '姨母',
        '姑父': '姑父',
        '姑母': '姑母',
        '堂兄': '堂兄',
        '堂弟': '堂弟',
        '堂姐': '堂姐',
        '堂妹': '堂妹',
        '表兄': '表兄',
        '表弟': '表弟',
        '表姐': '表姐',
        '表妹': '表妹',
        '侄子': '侄子',
        '侄女': '侄女',
        '外甥': '外甥',
        '外甥女': '外甥女',
    }
}


/**
 * 是否为 中专及以下学历，该部分无需要填写学历
 * @param numStr
 * @returns Number (? -> 0)
 */
function parseNum(numStr) {
    if(ifnotnull(numStr) == 1){
        numStr = parseInt(numStr);
        if(isNaN(numStr)){
            numStr = 0;
        }
    }else{
        numStr = 0;
    }
    return numStr;
}

